package com.xzy.sms.web.domain.dao;

import java.util.Date;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import com.xzy.sms.web.domain.entity.User;

/**
 * @desc 
 * @author wjw
 * @time 2017年11月16日下午3:33:11
 */
public interface UserDao extends JpaRepository<User, String>, JpaSpecificationExecutor<User> {
    
    /**
     * 根据id逻辑删除用户
     * @param versionNum 版本号
     * @param id 用户id
     * @return xx
     */
	@Modifying
    @Query("update User set delFlag='" + User.DEL_FLAG_DELETE + "' where userId = ?1")
    public int setDelFlag(String id);
    
    /**
     * 通过sql语句修改用户最后登录时间，因为该字段被设置为了updateable=false
     * @param lastLoginDate 新lastLoginDate
     * @param id id
     * @return xx
     */
    @Modifying
    @Query("update User set lastLoginDate=?1 where userId = ?2")
    public int updateLastLoginDate(Date lastLoginDate, String id);
    
    /**
     * 根据登录输入的账户查询用户信息
     * @param account xx
     * @param tenantId 租户id
     * @return xx
     */
    @Query("FROM User WHERE delFlag='" + User.DEL_FLAG_NORMAL + "' AND account = ?1")
    public User findByAccount(String account);
    
    /**
     * 通过sql语句修改密码，因为密码字段被设置为了updateable=false
     * @param newPassword 新password
     * @param date date
     * @param userId id
     * @return xx
     */
    @Modifying
    @Query("update User set password=?1,updateDate=?2 where userId = ?3")
    public int updatePasswordById(String newPassword, Date date, String userId);
}
